package com.csun.cmny.provider.service;

import com.csun.cmny.base.dto.LoginAuthDto;
import com.csun.cmny.provider.dto.MonthlyCountQueryDto;
import com.csun.cmny.provider.model.vo.OldSelfDataNewVo;
import com.csun.cmny.provider.model.vo.OldTypeDataVo;
import com.csun.cmny.provider.vo.*;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * @author chenzheng
 * @description:统计分析服务层
 * @date 2019/9/4 11:11
 */
public interface StatisticsService {
    /**
     * 通过年 月获取当前月份老人人数
     *
     * @param year    年
     * @param month   月
     * @param groupId 机构ID
     * @return
     */
    Integer getOldmanCountByYearAndMonth(Integer year, Integer month, Long groupId);

    /**
     * 通过年 月获取当前月份之前老人总数
     *
     * @param year    年
     * @param month   月
     * @param groupId 机构ID
     * @return
     */
    Integer getAllOldmanCountByYearAndMonth(Integer year, Integer month, Long groupId);

    /**
     * 通过年 月获取当前月份去世总人数
     *
     * @param year    年
     * @param month   月
     * @param groupId 机构ID
     * @return
     */
    Integer getDeadOldmanCountByYearAndCount(Integer year, Integer month, Long groupId);

    /**
     * 通过年 月 楼栋id 房间id 获取当月入住的床位数
     *
     * @param year       年
     * @param month      月
     * @param buildingId 楼楼栋D
     * @param floorNo    楼层
     * @return
     */
    Integer getBedCountByBuildingIdAndFloorNo(Integer year, Integer month, Integer buildingId, Integer floorNo);

    /**
     * 获取当前楼栋的层数
     *
     * @param buildingId 楼栋ID
     * @return
     */
    List<Integer> getAllFloorNoByBuildingId(Integer buildingId);

    /**
     * 查询机构月份入院老人
     *
     * @param groupId
     * @param date
     * @return
     */
    Integer selectByDate(Long groupId, String date);


    /**
     * 老人年龄统计
     *
     * @param groupId
     * @return
     */
    List<Integer> oldAgeStatistics(Long groupId);

    /**
     * 机构老人按人员类别统计人数
     *
     * @param groupId
     * @return
     */
    List<OldTypeDataVo> oldTypeStatistics(Long groupId);

    /**
     * 老人类型统计 -- 失能状态统计
     *
     * @param groupId
     * @return
     */
    OldSelfDataVo oldManTypeStatistics(Long groupId);

    /**
     * 老人性别统计
     * @param groupId
     * @return
     */
    OldSexDataVo oldManSexStatistics( Long groupId);

    /**
     * 入院月度汇总统计 通过月份查询
     * @param monthlyCountQueryDto
     * @return
     */
    PageInfo<OldManSummaryVo> selectByInOldMan(MonthlyCountQueryDto monthlyCountQueryDto);

    /**
     * 出院月度汇总统计,通过月份查询
     * @param monthlyCountQueryDto
     * @return
     */
    PageInfo<OldManSummaryVo> selectByOutOldMan(MonthlyCountQueryDto monthlyCountQueryDto);

    /**
     * 调房调级月度汇总统计,通过月份查询
     * @param monthlyCountQueryDto
     * @return
     */
    PageInfo<OldManSummaryVo> selectByUpdateOldMan(MonthlyCountQueryDto monthlyCountQueryDto);

    /**
     * 通过年 获取每月入院,出院,调房调级人数
     * @return
     */
    OldManMonthCountVo selectByMonthCount(Map map);

    /**
     * 按月查询老人生日
     * @return
     */
    List<OldManVo> listOldmanByBirthMonth(String month, LoginAuthDto loginAuthDto);

    List<OldSelfDataNewVo> newOldManTypeStatistics(Long groupId);
}
